package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.budget.RCBudget;
import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.product.RCProductEntry;
import com.shrct.businessprocess.product.RCProductServiceTracer;
import com.shrct.businessprocess.product.RCProductSpecification;
import com.shrct.businessprocess.project.RCCustomerContract;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.IHasAcceptedProducts;
import com.shrct.businessprocess.purchase.RCAnonymousContractProductItem;
import com.shrct.businessprocess.purchase.RCBudgetContractItem;
import com.shrct.businessprocess.purchase.RCBudgetContractNormalProductItem;
import com.shrct.businessprocess.purchase.RCBudgetContractProductItem;
import com.shrct.businessprocess.purchase.RCProductDeliver;
import com.shrct.businessprocess.purchase.impl.RCBudgetContractImpl;
import com.shrct.businessprocess.purchase.proxy.RCBudgetContractProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCBudgetContractImpl.class)
public interface RCBudgetContract extends IModelObject, IHasAcceptedProducts {
  public abstract RCBudget getBudget();
  
  public abstract RCBudgetContract setBudget(final RCBudget budget);
  
  public abstract RCCustomerContract getCustomerContract();
  
  public abstract RCBudgetContract setCustomerContract(final RCCustomerContract customerContract);
  
  public abstract RCProjectMoney getAmount();
  
  public abstract RCBudgetContract setAmount(final RCProjectMoney amount);
  
  public abstract String getContractId();
  
  public abstract RCEnterprise getCustomer();
  
  public abstract Collection<RCBudgetContractItem> getContratItems();
  
  public abstract RCBudgetContract removeFromContratItems(final RCBudgetContractItem rCBudgetContractItem);
  
  public abstract RCBudgetContract removeAllContratItems();
  
  public abstract Collection<RCProductDeliver> getDelivers();
  
  public abstract RCProductDeliver createAndAddtoDelivers();
  
  public abstract RCProductDeliver createAndAddtoDelivers(final Procedure1<RCProductDeliver> updater);
  
  public abstract RCBudgetContract removeFromDelivers(final RCProductDeliver rCProductDeliver);
  
  public abstract RCBudgetContract removeAllDelivers();
  
  public abstract RCProjectMoney getTotalAmount();
  
  public abstract RCProjectMoney getTotalListAmount();
  
  public abstract RCProjectMoney getTotalListAmount(final RCProductSpecification productSpec);
  
  public abstract Iterable<RCProductEntry> getAllAcceptedProducts();
  
  public abstract RCBudgetContractProductItem createProductItem();
  
  public abstract RCBudgetContractNormalProductItem createNormalProductItem();
  
  public abstract RCAnonymousContractProductItem createAnonymouseProductItem();
  
  public abstract Iterable<RCProductServiceTracer> getRCProductServiceTracer();
  
  public abstract void updateAmount(final RCProjectMoney amount);
  
  public abstract RCBudgetContractProxy toProxy();
}
